import { qryWxConfig } from '@api/login/index';
import { getWxConfigUrl, setWxConfig } from '@common/auth';

export default {
  namespaced: true,
  state: {
    isConfigSuccess: null,
    errorMessage: '',
    jsApiList: ['chooseImage', 'uploadImage', 'scanQRCode']
  },
  getters: {
    isConfigSuccess: (state) => state.isConfigSuccess,
    errorMessage: (state) => state.errorMessage
  },
  mutations: {
    setIsConfigSuccess: (state, value) => {
      state.isConfigSuccess = value;
    },
    setErrorMessage: (state, value) => {
      state.errorMessage = value;
    }
  },
  actions: {
    getWxConfig() {
      return new Promise((resolve, reject) => {
        qryWxConfig(getWxConfigUrl())
          .then((res) => {
            const { success, data } = res;
            if (!success) return false;

            setWxConfig(data || {});
            resolve(res);
          })
          .catch((error) => reject(error));
      });
    },
    initWxConfig({ commit, state }, config) {
      return new Promise((resolve, reject) => {
        const { jsApiList } = state;
        const { appId, noncestr: nonceStr, signature, timestamp } = config;
        wx.config({
          debug: false, // 开启调试模式。
          appId, // 必填，公众号的唯一标识
          timestamp, // 必填，生成签名的时间戳
          nonceStr, // 必填，生成签名的随机串
          signature, // 必填，签名
          jsApiList // 接口列表
        });
        // config验证通过后调用
        wx.ready(() => {
          commit('setIsConfigSuccess', true);
          resolve(true);
        });
        // config验证失败后调用
        wx.error((res) => {
          // config信息验证失败会执行error函数，如签名过期导致验证失败，
          // 具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
          console.error('微信config配置错误：', res);
          commit('setIsConfigSuccess', false);
          commit('setErrorMessage', res);
          reject(new Error('false'));
        });
      });
    }
  }
};
